A/D変換の制御法

A/D変換機能をチェックしてみよう!

<項目>PIC16F87XシリーズのA/D変換機能について
PIC16F87xシリーズは、10ビットのA/D変換モジュールが内蔵されています。分解能が1024段階となっていますので、かなり応用範囲を広げることが出来ます。A/D変換が8ビットの従来のチップでは、256段階しかなかったので、測定するには少々分解能不足なところがありました。1024の分解能があるということは、1Vの電圧を測るときには1mV単位で計測できるということです。PICでは、A/D変換をするために、まずアナログ信号を一旦内部のコンデンサに蓄えます。その後、参照となる一定の電圧を加算して比較しながら計測するという逐次変換方式であるため、A/D変換を正確に行うためには、蓄積するまでの時間(アクィジション時間)と計測する時間の両方を確保することが必要になります。従来の8ビットPICの場合と比較して、クロック20MHzの時でこの時間がどれぐらいかというと、

蓄積時間+計測時間=
 12μsec+1.6μsec×9.5 =最小27.2μsec(8ビットのPIC) 
 20μsec+1.6μsec×12 =最小39.2μsec(10ビットのPIC) 

となっています。これ以上の高速でのA/D変換動作は物理的にできないということになります。つまり、1秒間に約3万6千回(8ビット)、約2万5千回(10ビット)程度の計測回数です。詳細については、(5)A/D変換のシーケンスについての説明をご覧ください。


<項目>A/D変換の制御用レジスタ
A/D変換関連の制御用レジスタとして、ADCON0,ADCON1,ADRESの3種類のレジスタがあります。まず、これらの内容と機能を把握する必要があります。

(A)ADCON0レジスタ(Bank0)
A/D変換クロックなどの指定とチャンネル指定などの設定を行います。ADCON0レジスタの構成は図1のようになっていて、大部分のA/D変換に関する設定ができるようになっています。その機能について、表1に示します。

ADCON0レジスタの構成
図1. ADCON0レジスタの構成


表1.ADCON0レジスタの機能説明
bit 名称 機能 データ 意味
7,6 ADCSx
(ADCS1,ADSC0)
A/D変換
クロック指定ビット
00 Fosc/2
01 Fosc/8
10 Fosc/32
11 Frc(内部RC発振)
5,4,3 CHSx
(CHS2,CHS1,CHS0)
アナログチャネル
指定ビット
000 CH0(RA0)
001 CH1(RA1)
010 CH2(RA2)
011 CH3(RA3)
100 CH4(RA5)
101 CH5(RE0) (注1)
110 CH6(RE1) (注1)
111 CH7(RE2) (注1)
GO/DONE A/D 変換
ステータスビット
ADON=1の時、このビットをセットすると、
A/D変換が開始される。
ADON=1の時、A/D 変換が終了
すると自動的にクリアされる
なし 「0」とリードされる
ADON A/D ON ビット A/D変換器モジュールを動作
A/D変換器モジュールはオフ

(注1)これらのチャネルは28 ピンデバイス(PIC16F873、876)にはありません。



(B)ADCON1レジスタ(Bank1)
ADCON1レジスタの構成は図2のようになっていて、ポートピンの機能を構成します。ポートピンはアナログ入力(RA3 は電圧リファレンスとしても)またはディジタルI/O として構成できます。

ADCON1レジスタの構成
図2. ADCON1レジスタの構成


ADCON1レジスタの各ビットにおける機能は、表2のようになっています。

表2.ADCON1レジスタの機能説明
bit 名称 機能 データ 意味
ADFM A/D 結果
フォーマットセレクト
右詰
ADRESHの6MSbは「0 」とリードされる
左詰
ADRESLの6LSbは「0 」とリードされる
6,5,4 なし 「0」とリードされる
3,2,1,0 PCFGx
(PCFG3〜PCFG0)
A/D ポート構成コントロールビット   表3.A/D ポートの設定表を参照


ADCON1レジスタの3〜0ビット(PCFGx)の設定内容は、表3のようになっています。

表3.A/D ポートの設定表
PCFGx AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 Vref+ Vref−
RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0
VDD VSS
Vref+ RA3 VSS
VDD VSS
Vref+ RA3 VSS
VDD VSS
Vref+ RA3 VSS
VDD VSS
VDD VSS
Vref+ Vref- RA3 RA2
VDD VSS
Vref+ RA3 VSS
Vref+ Vref- RA3 RA2
Vref+ Vref- RA3 RA2
Vref+ Vref- RA3 RA2
VDD VSS
Vref+ Vref- RA3 RA2

(注)「A」はアナログ入力,「D」はディジタル入出力,
   「Vref+」,「Vref-」は基準電圧入力の上限と下限
   リファレンス指定のない時は、電源電圧VDDとグランド電圧VSSが基準となる。
   AN5〜AN7は28 ピンデバイス(PIC16F873、876)にはありません。


(C)ADRESレジスタ(Bank0)
ADRESHレジスタ(A/D結果Highレジスタ)、およびADRESLレジスタ(A/D結果Lowレジスタ)は、10 ビットのA/D 変換結果が入ります。A/D 変換が終了すると、結果がA/D 結果レジスタのペアにロードされ、GO/DONE ビット(ADCON0<2>)がクリアされて、A/D 割り込みフラグビットADIF がセットされます。


<項目>A/D変換のブロック構成
A/Dモジュールのブロック図を図3に示します。図3中の黄色のスイッチ構成部分ですが、ADCON0のアナログチャネル指定ビット(CHS0〜2)により、AN0〜AN7が選択できます。また、図3中の緑色や水色のスイッチ構成部分ですが、ADCON1のA/D ポート構成コントロールビット(PCFG3〜0)により、基準電圧が選択されます。AN3「Vref+」およびAN2「Vref-」は、基準電圧入力の上限と下限と設定することもできますし、リファレンス指定のない時は、電源電圧VDDとグランド電圧VSSが基準となるように設定することもできます。

A/Dのブロック構成図
図3. A/Dのブロック構成図
(Microchip社データシート参照)



<項目>A/D変換の実行ステップ
A/D モジュール設定後は、変換開始前に選択したチャネルをアクィジションする必要があります。アナログ入力チャネルには、対応するTRIS ビットを入力として選択しなければなりません。サンプル時間を決定するには、A/D アクィジションの条件を参照してください。このアクィジション時間が経過した後にA/D 変換を開始できます。A/D変換を実行するには次のステップに従います。

  1. A/D モジュールを構成する
    ・アナログピン/電圧リファレンス/ディジタルI/O の構成(ADCON1)
    ・A/D入力チャネルの選択(ADCON0)
    ・A/D 変換クロックの選択(ADCON0)
    ・A/D モジュールをオンにする(ADCON0)
     
  2. A/D 割り込みを設定する(必要な場合)
    ・ADIF ビットのクリア
    ・ADIE ビットのセット
    ・GIE ビットのセット
     
  3. 必要なアクィジション時間を待つ
     
  4. 変換を開始する
    ・GO/DONE ビットをセット(ADCON0)
     
  5. 次のどちらかによりA/D 変換が終了するのを待つ
    ・GO/DONE ビットがクリアされたかの確認
    ・A/D 割り込みを待つ
     
  6. A/D 結果レジスタのペア(ADRESH:ADRESL)をリードして、必要ならばADIF をクリアする
     
  7. 次回の変換については、必要に応じてステップ1またはステップ2から実行する
    次のアクィジション開始前に、少なくとも2TAD待つ必要があります
    (注) 1 ビットあたりのA/D 変換時間をTAD として定義



<項目>A/D変換のシーケンスについて
図4に変換のシーケンスを示します。A/D変換後、または新しいA/D チャネルが選択された時にホールド用コンデンサの充電が始まります。アクィジション時間とは、A/D モジュールのホールド用コンデンサが外部電圧レベルになるまでの充電時間です。この必要なアクィジション時間を待った後、GOビットがセットされたときにA/D変換が開始されます。A/D 変換が終了すると、結果がADRES レジスタにロードされます。その後ADIF ビットがセットされ、ホールド用コンデンサは選択チャネルで次の電圧のアクィジションを始めます。これら2 つの時間の合計がサンプリング時間です。

A/D変換のシーケンス
図4. A/D変換のシーケンス



<項目>アクィジション時間について
A/D 変換器が規定の精度に結果を出すには、ホールド用コンデンサ(CHOLD)を入力チャネルの電圧までフル充電されなければいけません。アナログ入力モデルを図5に示します。ソースインピーダンス(Rs)と内部サンプリングスイッチ(Rss)のインピーダンスはコンデンサCHOLD の充電に必要な時間に直接関係します。サンプリングスイッチ(Rss)のインピーダンスはデバイスの電圧(VDD )により変化します(図6を参照)。
アナログソースの最大推奨インピーダンスはRS=10kΩです。インピーダンスが少なくなるほど、アクィジション時間も少なくなります。アナログ入力チャネルが選択(または、変更)された後は、変換を開始する前に、このアクィジションを行わなければなりません。

アナログ入力モデル
図5. アナログ入力モデル(Microchip社データシート参照)
CPIN :入力容量
VT :スレッショルド電圧
I leakage :各種接合によるピンのリーク電流
RIC :内部接続抵抗
SS :サンプリングスイッチ
CHOLD :サンプル/ホールド容量(DAC から)



Rss対VDD特性
図6. Rss対VDD特性
(Microchip社データシート参照)



最小アクィジション時間を計算するには、式(1)に示す公式で計算することができます。この公式は1/2LSBのエラーを使用する(A/D は1024 ステップ)ことを想定しています。1/2LSBエラーはA/D が規定の分解能を満たすために許された最大エラーです。

TACQ= Amplifier Settling Time+
      Holding Capacitor Charging Time+
      Temperature Coefficient
    = TAMP + TC + TCOFF
    = 2μs + TC + [(Temperature−25℃)×(0.05μs/℃)] ・・・式(1)
ここで、
TC = −CHOLD× (RIC + RSS + RS)× ln(1/2047)
温度係数TCOFFは、温度>25 ℃のときのみ必要
(Microchip社データシート参照)
(注1)リファレンス電圧(VREF)は、それ自身をキャンセルするので、
    この式に影響を与えません。
(注2)ホールド用コンデンサ(CHOLD)は各変換後、放電させません。
(注3)アナログ信号源の推奨インピーダンスは10k Ω以下です。
    これは、ピンのリーク仕様を満たすために必要です。
(注4)変換終了後、アクィジションが再開する前に2.0TAD の遅延が
    終了しなければなりません。この時間中はホールド用コンデン
    サは選択されたA/D 入力チャネルに接続されません。


次に最小必要アクィジション時間 TACQ の計算例を示します。この計算は次のアプリケーションシステムの想定に基づいています。(Microchip社データシート参照)

CHOLD = 120 pF
Rs = 10 kΩ
Conversion Error ≦1/2 LSB
VDD = 5V →Rss = 7 kΩ(図6 のグラフ参照)
Temperature = 50℃(system max.)
VHOLD =0V @time=0

これらの条件を公式(1)に代入すると、
TC = −CHOLD×(RIC + RSS + RS)× ln(1/2047)
   = −120pF×(1kΩ + 7kΩ + 10kΩ)× ln(0.0004885)
   = −120pF×18kΩ×(-7.624)
   = 16.47μs
よって、最小必要アクィジション時間は、
TACQ= 2μs + 16.47μs + [(50℃-25℃)×(0.05μs/℃)]
    = 2μs + 16.47μs + 1.25μs
    = 19.72μs
と求まります。


<項目>A/D 変換クロックの選択について
1 ビット当たりのA/D 変換時間はTAD として定義されます。A/D 変換は、10 ビット変換にでは最小12TAD が必要です。A/D 変換クロックのソースはソフトウエアで選択します。TAD のオプションとして次のものがあります。

正しいA/D 変換のために、必ずA/D 変換クロック(TAD)を、最小TAD 時間の1.6μs以上にします。
A/D変換用クロックの指定方法について表4に示しますが、システムクロックの周波数により、指定できる範囲が限られていますので、注意が必要です。それは、A/D変換クロックの最小値が1.6μsとなっているため、この値より小さくなる設定はできません。また、変換時間が長い設定については別のクロック設定をお勧めします。内部RC発振回路を使用するFrc指定の場合は、システムクロックには影響されず、2〜6μsの周波数になりますが、正確なクロック周波数ではなくなります。

表4.A/D変換用クロックの選択
設定 ADCS1,ADCS0 システムクロック
20MHz 10MHz 4MHz 1MHz
Fosc/2 00 0.1μs 0.2μs 0.5μs 2.0μs
Fosc/8 01 0.4μs 0.8μs 2.0μs 8.0μs
Fosc/32 10 1.6μs 3.2μs 8.0μs 32μs
Frc 11 2〜6μs


(注1)RC ソースの標準TAD 時間は、4μsです。
(注2)赤い枠の値は、A/D変換クロックの最小値に
    違反しています。(推奨範囲外)

(注3)青い枠の値は、変換時間を短くするため、
    別のクロック設定を勧めます。(推奨範囲外)

(注4)デバイスの周波数が1 MHz より速い場合、
    RC のA/D 変換ソースはスリープでのみの使用を推奨します。



<項目>アナログポートピンの構成
ADCON1 およびTRIS レジスタはA/D ポートピンの動作を制御します。アナログ入力として希望するポートピンには、それに対応するTRIS ビットのセット(入力)が必要です。TRIS ビットがクリア(出力)された場合、ディジタル出力レベル(VOH またはVOL)が変換されます。CHS2〜0 ビットおよびTRIS ビットの状態に関係なくA/D 変換は行われます。
アナログ入力チャンネルとして構成されるピンをリードすると0 (Low レベル)とリードされます。ディジタル入力として構成されるピンはアナログ入力と変換します。ディジタル入力のアナログレベルは変換精度に影響を与えません。ディジタル入力(AN7〜AN0 を含む)と設定されたピンにアナログレベルが入力されると、入力バッファがデバイスの仕様外の電流を消費することがあります。


<項目>A/D変換の実行方法
A/D 変換の実行方法を示します。アナログピンはアナログ入力として構成されています。アナログリファレンス(VREF)はデバイスのVDD とVSS です。A/D 割り込みは発生可、A/D 変換クロックはFRC 、A/D結果は左詰されます。変換はRA0/AN0 ピン(チャネル0 )で実行されます。
変換中にGO/DONE ビットをクリアすると、変換を中断することになります。中断した場合は、A/D 結果レジスタは更新されません。つまり、ADRESH,ADRESL レジスタは最後に完了した変換値(またはADRESH,ADRESLレジスタに最後にライトされた値)を保持します。A/D変換の中断後は、次のアクィジションを開始する前に2TAD のウェイトが必要です。この2TAD のウェイト後、選択されたチャネルでのアクィジションが自動的に開始されます。


A/D変換の実行例
BSF    STATUS, RP0
BCF    STATUS, RP1
CLRF   ADCON1
BSF    PIE1, ADIE
BCF    STATUS, RP0
MOVLW   B’11000001’
MOVWF   ADCON0
BCF    PIR1, ADIF
BSF    INTCON, PEIE
BSF    INTCON, GIE
; Bank 1 を選択する
;
; A/D 入力を構成する
; A/D 割り込みを発生可にする
; Bank 0 を選択する
; RC クロック、A/D はオン、チャネル 0を選択
;
; A/D 割り込みフラグビットをクリアする
; 周辺割り込みを発生させる
; すべての割り込みを発生させる
;
; 選択した入力チャネルに必要なサンプリング時間が経過後、
; 変換を開始します。
;
BSF    ADCON0, GO
      :
      :
; A/D 変換を開始する
; A/D 変換が完了すると、ADIF ビットがセットされ、
; GO/DONE ビットがクリアされる。

図7に、A/D変換のTADサイクルを示します。GO ビットがセットされた後、1 回目のセグメントに最低でTCY 、最大でTAD です。
(注)GO/DONE ビットはA/D をオンにする命令と同じ命令ではセットできません。

A/D変換のTADサイクル
図7. A/D変換のTADサイクル



<項目>A/D結果レジスタについて
ADRESH,ADRESL レジスタのペアは、A/D 変換の終了時に10 ビットのA/D 結果がロードされるロケーションです。このレジスタのペアは16 ビット幅です。A/D モジュールは、16 ビット結果レジスタの10 ビットの結果に左または右詰できます。A/D フォーマットセレクトビット(ADFM)は、この左詰または右詰を制御します。図8にA/D 結果の詰め方を示します。余分なビットには「0」がロードされます。A/D 結果がこれらのロケーションをオーバーライドしない(A/D を使用しない)場合、これらのレジスタは汎用8 ビットレジスタとして使用できます。

A/D 結果の右/左詰め
図8.A/D 結果の右/左詰め



<項目>スリープ中のA/D 動作
A/D モジュールはスリープ中も動作できます。そのためには、A/D クロックソースをRC(ADCS1,ADCS0=11)にセットする必要があります。RC クロックソースが選択されると、A/D モジュールは1 命令サイクル待ってから変換を開始します。これにより、SLEEP 命令を実行して、変換によるディジタル変換ノイズを除去することができます。変換が終了すると、GO/DONE ビットがクリアされて、結果がADRES レジスタにロードされます。A/D 割り込みが発生可の場合は、デバイスはスリープから起動します。A/D 割り込み発生が許可されていない場合は、ADON ビットがセットされたままであっても、A/D モジュールはオフになります。A/D クロックソースが別のクロックオプション(RC 以外)である場合、SLEEP 命令により変換は中断され、ADON ビットがセットされたままであっても、A/D モジュールはオフになります。A/D をオフにすることにより、A/D モジュールは最も消費電流の低い状態になります。

(注)A/D モジュールがスリープ中に動作するには、A/D クロックソースをRC(ADCS1,ADCS0=11)に設定する必要があります。スリープ中に変換するには、GO/DONEビットをセットした後すぐにSLEEP 命令を実行します。


<項目>リセットの影響
デバイスリセットによりすべてのレジスタは強制的にリセット状態になります。これによりA/D モジュールは強制的にオフになり、すべての変換が中止になります。ADRESH,ADRESL レジスタの値はパワー・オン・リセットでは変更されません。ADRESH,ADRESL レジスタはパワー・オン・リセット後はデータが不定です。


次へは、A/D変換の動作確認です。


<前ページへ> <次ページへ>
<TOPページへ>



PC用眼鏡【管理人も使ってますがマジで疲れません】 解約手数料0円【あしたでんき】 Yahoo 楽天 NTT-X Store

無料ホームページ 無料のクレジットカード 海外格安航空券 ふるさと納税 海外旅行保険が無料! 海外ホテル